﻿using System;
using System.Collections.Generic;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LJH.SmartAlarmSystem.Utils
{
    public class PaintClass
    {
        /// <summary>
        /// 创建圆角矩形的GraphicsPath路径，支持自适应圆角半径（不超过矩形最小边的一半）
        /// 当圆角半径为0时，返回标准矩形的GraphicsPath路径
        /// </summary>
        /// <param name="rectangle">矩形区域，定义位置和尺寸</param>
        /// <param name="radius">圆角半径，实际值会被限制为不超过矩形最小边的一半</param>
        /// <returns>包含圆角矩形路径的GraphicsPath对象</returns>
        public static GraphicsPath GetRoundedRectangle(Rectangle rectangle, int radius)
        {
            // 计算有效直径（限制圆角直径不超过矩形最小边）
            int diameter = 2 * radius;
            int minEdge = Math.Min(rectangle.Width, rectangle.Height);
            if (diameter >  minEdge)
            {
                diameter = Math.Min(diameter, minEdge);
                radius = diameter / 2;
            }

            GraphicsPath gp = new GraphicsPath();

            // 上边直线（仅当剩余宽度>0时绘制）
            if (diameter < rectangle.Width)
            {
                gp.AddLine(rectangle.Left + radius, rectangle.Top,
                           rectangle.Right - radius, rectangle.Top);
            }

            // 右上角圆弧（270°起始，扫过90°）
            gp.AddArc(rectangle.Right - diameter, rectangle.Top, diameter, diameter, 270F, 90F);

            // 右边直线（仅当剩余高度>0时绘制）
            if (diameter < rectangle.Height)
            {
                gp.AddLine(rectangle.Right, rectangle.Top + radius,
                           rectangle.Right, rectangle.Bottom - radius);
            }

            // 右下角圆弧（0°起始，扫过90°）
            gp.AddArc(rectangle.Right - diameter, rectangle.Bottom - diameter, diameter, diameter, 0F, 90F);

            // 下边直线（仅当剩余宽度>0时绘制）
            if (diameter < rectangle.Width)
            {
                gp.AddLine(rectangle.Right - radius, rectangle.Bottom,
                           rectangle.Left + radius, rectangle.Bottom);
            }

            // 左下角圆弧（90°起始，扫过90°）
            gp.AddArc(rectangle.Left, rectangle.Bottom - diameter, diameter, diameter, 90F, 90F);

            // 左边直线（仅当剩余高度>0时绘制）
            if (diameter < rectangle.Height)
            {
                gp.AddLine(rectangle.Left, rectangle.Bottom - radius,
                           rectangle.Left, rectangle.Top + radius);
            }

            // 左上角圆弧（180°起始，扫过90°）
            gp.AddArc(rectangle.Left, rectangle.Top, diameter, diameter, 180F, 90F);

            return gp;
        }
    }
}
